﻿// Decompiled with JetBrains decompiler
// Type: Microsoft.InfoCards.GetCryptoTransformRequest
// Assembly: infocard, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// MVID: 8E14765A-6610-409A-BA36-099A0642905D
// Assembly location: E:\git\ALLIDA\windll\infocard.exe

using Microsoft.InfoCards.Diagnostics;
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using System.Security.Principal;
using System.Text;

namespace Microsoft.InfoCards
{
  internal class GetCryptoTransformRequest : ClientRequest
  {
    private int m_cryptoSession;
    private CipherMode m_mode;
    private PaddingMode m_padding;
    private int m_feedbackSize;
    private SymmetricCryptoSession.Direction m_direction;
    private byte[] m_iv;
    private TransformCryptoSession m_transformSession;

    public GetCryptoTransformRequest(
      Process callingProcess,
      WindowsIdentity callingIdentity,
      IntPtr rpcHandle,
      Stream inArgs,
      Stream outArgs)
      : base(callingProcess, callingIdentity, rpcHandle, inArgs, outArgs)
    {
    }

    protected override void OnMarshalInArgs()
    {
      BinaryReader binaryReader = (BinaryReader) new InfoCardBinaryReader(this.InArgs, Encoding.Unicode);
      this.m_cryptoSession = binaryReader.ReadInt32();
      this.m_mode = (CipherMode) binaryReader.ReadInt32();
      this.m_padding = (PaddingMode) binaryReader.ReadInt32();
      this.m_feedbackSize = binaryReader.ReadInt32();
      this.m_direction = (SymmetricCryptoSession.Direction) binaryReader.ReadInt32();
      this.m_iv = binaryReader.ReadBytes(binaryReader.ReadInt32());
      InfoCardTrace.ThrowInvalidArgumentConditional(0 == this.m_feedbackSize, "feedbackSize");
    }

    protected override void OnProcess()
    {
      this.m_transformSession = ((SymmetricCryptoSession) CryptoSession.Find(this.m_cryptoSession, this.CallerPid, this.RequestorIdentity.User)).GetCryptoTransform(this.m_mode, this.m_padding, this.m_feedbackSize, this.m_direction, this.m_iv);
    }

    protected override void OnMarshalOutArgs()
    {
      BinaryWriter bwriter = new BinaryWriter(this.OutArgs, Encoding.Unicode);
      this.m_transformSession.Write(bwriter);
      bwriter.Flush();
    }
  }
}
